// permission 许可 权限的意思
// 权限拦截在路由跳转之前 导航守卫
import router from '@/router/index'
import store from '@/store'
import NProgress from 'nprogress' // 引入进度条
import 'nprogress/nprogress.css' // 引入进度条样式
// 页面白名单
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  NProgress.start() // 开启进度条
  if (store.getters.token) {
    // 有toekn
    if (to.path === '/login') {
      // to登录页 跳转到主页
      next('/')
    } else {
      // 不去登录页 放行
      // 如果当前vuex中用户资料的用户id 则表示已经有资料了 不需要获取了 如果没有id才需要获取
      if (!store.getters.userId) {
        // 如果没有id才表示当前用户资料没有获取过， 则获取用户资料
        await store.dispatch('user/getUserInfo')
        // 如果是后续 需要根据用户资料获取数据或进行其他操作的话， 这里必须先执行
        // 意思是说这里必须改为同步的 - 用await强制等待获取资料成功在执行下面代码
      }
      next()
    }
  } else {
    // 无token
    // 在白名单中
    if (whiteList.indexOf(to.path) > -1) {
      // 放行
      next()
    } else {
      // 跳转到登录页
      next('/login')
    }
  }
  // 手动强制关闭一次  为了解决 手动切换地址时  进度条的不关闭的问题
  NProgress.done
})
// 不需要导出 main.js 直接引入
// 后置守卫
router.afterEach(() => {
  NProgress.done() // 关闭进度条
})
